#include "../../redis_data.hpp"
#include <gflags/gflags.h>
#include <iostream>
#include <thread>

DEFINE_string(ip, "127.0.0.1", "这是服务器的IP地址，格式：127.0.0.1");
DEFINE_int32(port, 6379, "这是服务器的端口, 格式: 8080");
DEFINE_int32(db, 0, "库的编号：默认0号");
DEFINE_bool(keep_alive, true, "是否进行长连接保活");

void test_session(const std::shared_ptr<sw::redis::Redis> &client)
{
    xu::Session ss(client);
    ss.Append("会话1","用户1");
    ss.Append("会话2","用户2");
    ss.Append("会话3","用户3");
    ss.Append("会话4","用户4");

    ss.Remove("会话2");
    ss.Remove("会话3");

    auto res1 = ss.GetUid("会话1");
    if(res1) std::cout<<*res1<<std::endl;
    auto res2 = ss.GetUid("会话2");
    if(res2) std::cout<<*res2<<std::endl;
    auto res3 = ss.GetUid("会话3");
    if(res3) std::cout<<*res3<<std::endl;
    auto res4 = ss.GetUid("会话4");
    if(res4) std::cout<<*res4<<std::endl;
    
}

void test_status(const std::shared_ptr<sw::redis::Redis> &client)
{
    xu::Status ss(client);
    ss.Append("用户5");
    ss.Append("用户6");
    ss.Append("用户7");
    ss.Append("用户8");

    ss.Remove("用户6");
    ss.Remove("用户7");

    auto res1 = ss.Exist("用户5");
    if(res1) std::cout<<"用户5存在"<<std::endl;
    auto res2 = ss.Exist("用户6");
    if(res2) std::cout<<"用户6存在"<<std::endl;
    auto res3 = ss.Exist("用户7");
    if(res3) std::cout<<"用户7存在"<<std::endl;
    auto res4 = ss.Exist("用户8");
    if(res4) std::cout<<"用户8存在"<<std::endl;
    
}


void test_codes(const std::shared_ptr<sw::redis::Redis> &client)
{
    xu::Codes ss(client);
    ss.Append("验证码id1","验证码1");
    ss.Append("验证码id2","验证码2");
    ss.Append("验证码id3","验证码3");
    ss.Append("验证码id4","验证码4");

    ss.Remove("验证码id1");
    ss.Remove("验证码id2");

    auto res1 = ss.GetCode("验证码id1");
    if(res1) std::cout<<*res1<<std::endl;
    auto res2 = ss.GetCode("验证码id2");
    if(res2) std::cout<<*res2<<std::endl;
    auto res3 = ss.GetCode("验证码id3");
    if(res3) std::cout<<*res3<<std::endl;
    auto res4 = ss.GetCode("验证码id4");
    if(res4) std::cout<<*res4<<std::endl;

    std::this_thread::sleep_for(std::chrono::seconds(3));

    auto res5 = ss.GetCode("验证码id1");
    if(!res5) std::cout<<"验证码1被清理"<<std::endl;
    auto res6 = ss.GetCode("验证码id2");
    if(!res6) std::cout<<"验证码2被清理"<<std::endl;
    auto res7 = ss.GetCode("验证码id3");
    if(!res7) std::cout<<"验证码3被清理"<<std::endl;
    auto res8 = ss.GetCode("验证码id4");
    if(!res8) std::cout<<"验证码4被清理"<<std::endl;
    
}



int main(int argc, char *argv[])
{
    google::ParseCommandLineFlags(&argc, &argv, true);
    InitLog(false);

    auto client = xu::RedisClientFactory::Create(FLAGS_ip,FLAGS_port,FLAGS_db,FLAGS_keep_alive);
    //test_session(client);
    //test_status(client);
    test_codes(client);
    return 0;
}